package com.qdlc.p2p.dal.dto;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import com.qdlc.p2p.common.constant.Global;
import com.qdlc.p2p.common.util.DateUtil;

/**
 * 用户酒券获取记录实体
 *
 * @author ygw
 * @version 1.1.0.0
 */
@Entity
@Table(name = Global.DB_PREFIX + "additional_user_wine_coupons")
public class UserWineCoupons {

    /** 主键 */
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    /** 获得用户 */
    @Column(name = "user_id")
    private long userId;

    /** 酒券名称 */
    private String name;

    /** 酒券金额 */
    private double amount;

    /** 酒券类型：1现金酒券 */
    private byte type;

    /** 状态：1已使用，0未使用，2过期，3无效 */
    private byte status;

    /** 酒券有效天数 */
    private int validDay;

    /** 酒券过期时间 */
    private Date expiredTime;

    /** 使用时间 */
    private Date useTime;

    /** 获取时间 */
    private Date addTime;

    /** 获取来源 */
    private String sourceType;

    /** 使用类型 */
    private String useType;

    /** 关联ID */
    private long keyId;

    /** 版本号 */
    private long version;

    public UserWineCoupons() {
    }

    /**
     * 封装用户酒券
     *
     * @param user       获取用户
     * @param name       酒券名称
     * @param amount     酒券金额
     * @param type       酒券类型
     * @param validDay   有效天数
     * @param sourceType 酒券来源
     * @param keyId 关联商品
     * @param version 关联标id
     */
    public UserWineCoupons(User user, String name, double amount, byte type, int validDay,long keyId,long version,
                           String sourceType) {
        super();
        if(user != null){
        	this.userId = user.getUserId();
        }
        this.name = name;
        this.amount = amount;
        this.type = type;
        this.validDay = validDay;
        // 如果有效天数等于0则表明酒券有效期限是长久有效的
        if (validDay > 0) {
            this.expiredTime = DateUtil.rollDay(DateUtil.getNow(), validDay);
        }
        this.sourceType = sourceType;
        this.keyId = keyId;
        this.version = version;
        this.addTime = DateUtil.getNow();
    }

    /**
     * 获取主键
     *
     * @return 主键
     */
    public long getId() {
        return id;
    }

    /**
     * 设置主键
     *
     * @param id 要设置的主键
     */
    public void setId(long id) {
        this.id = id;
    }


    public long getUserId() {
		return userId;
	}

	public void setUserId(long userId) {
		this.userId = userId;
	}

	/**
     * 获取酒券名称
     *
     * @return 酒券名称
     */
    public String getName() {
        return name;
    }

    /**
     * 设置酒券名称
     *
     * @param name 要设置的酒券名称
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取酒券金额
     *
     * @return 酒券金额
     */
    public double getAmount() {
        return amount;
    }

    /**
     * 设置酒券金额
     *
     * @param amount 要设置的酒券金额
     */
    public void setAmount(double amount) {
        this.amount = amount;
    }

    /**
     * 获取酒券类型 1、现金酒券 2虚拟酒券
     *
     * @return 酒券类型
     */
    public byte getType() {
        return type;
    }

    /**
     * 设置酒券类型 1、现金酒券 2虚拟酒券
     *
     * @param type 酒券类型
     */
    public void setType(byte type) {
        this.type = type;
    }

    /**
     * 获取状态：1已使用，0未使用，2过期，3无效
     *
     * @return 状态：1已使用，0未使用，2过期，3无效
     */
    public byte getStatus() {
        return status;
    }

    /**
     * 设置状态：1已使用，0未使用，2过期，3无效
     *
     * @param status 要设置的状态：1已使用，0未使用，2过期，3无效
     */
    public void setStatus(byte status) {
        this.status = status;
    }

    /**
     * 获取酒券有效天数
     *
     * @return 酒券有效天数
     */
    public int getValidDay() {
        return validDay;
    }

    /**
     * 设置酒券有效天数
     *
     * @param validDay 要设置的酒券有效天数
     */
    public void setValidDay(int validDay) {
        this.validDay = validDay;
    }

    /**
     * 获取酒券过期时间
     *
     * @return 酒券过期时间
     */
    public Date getExpiredTime() {
        return expiredTime;
    }

    /**
     * 设置酒券过期时间
     *
     * @param expiredTime 酒券过期时间
     */
    public void setExpiredTime(Date expiredTime) {
        this.expiredTime = expiredTime;
    }

    /**
     * 获取使用时间
     *
     * @return 使用时间
     */
    public Date getUseTime() {
        return useTime;
    }

    /**
     * 设置使用时间
     *
     * @param useTime 要设置的使用时间
     */
    public void setUseTime(Date useTime) {
        this.useTime = useTime;
    }

    /**
     * 获取获取时间
     *
     * @return 获取时间
     */
    public Date getAddTime() {
        return addTime;
    }

    /**
     * 设置获取时间
     *
     * @param addTime 要设置的获取时间
     */
    public void setAddTime(Date addTime) {
        this.addTime = addTime;
    }

    /**
     * 获取酒券来源
     *
     * @return 酒券来源
     */
    public String getSourceType() {
        return sourceType;
    }

    /**
     * 设置酒券来源
     *
     * @param sourceType 酒券来源
     */
    public void setSourceType(String sourceType) {
        this.sourceType = sourceType;
    }

    /**
     * 获取使用类型
     *
     * @return 使用类型
     */
    public String getUseType() {
        return useType;
    }

    /**
     * 设置使用类型
     *
     * @param useType 使用类型
     */
    public void setUseType(String useType) {
        this.useType = useType;
    }

    /**
     * 获取关联ID
     *
     * @return 关联ID
     */
    public long getKeyId() {
        return keyId;
    }

    /**
     * 设置关联ID
     *
     * @param keyId 关联ID
     */
    public void setKeyId(long keyId) {
        this.keyId = keyId;
    }

    /**
     * 获取版本号
     *
     * @return 版本号
     */
    public long getVersion() {
        return version;
    }

    /**
     * 设置版本号
     *
     * @param version 版本号
     */
    public void setVersion(long version) {
        this.version = version;
    }
}
